﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Win32;
using System.IO;

namespace CompilerTest
{
    public partial class MainWindow : Window
    {
        string olayimiz;
        public MainWindow()
        {
            InitializeComponent();
        }

        private void TextBlock_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            OpenFileDialog op = new OpenFileDialog();
            op.Multiselect = false;
            op.DefaultExt = ".cips";
            op.Filter = "Cips Files (.cips)| *.cips";
            if (op.ShowDialog()==true)
            {
                try
                {
                    tb1.Text = op.FileName;
                }
                catch { MessageBox.Show("dosya seçin"); }
            }
        }

        private void acButton_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            string Dataread = File.ReadAllText(tb1.Text);
            Satirparcala(Dataread);
        }

        private void Satirparcala(string Dataread)
        {
            string[] satirlar = Dataread.Split('\n');
            foreach (string satir in satirlar)
            {
                NesneBul(satir);      
            }
        }

        private void NesneBul(string SATIR)
        {
            int i = SATIR.IndexOf('=');
            if (i > 0)
            {
                string CipsControl = SATIR.Substring(0,i); //(Button)=
                string CipsProperty = SATIR.Substring(i+1); //Button = (gerikalan)
                NesneBelirle(CipsControl, CipsProperty);
            }
        }

        private void NesneBelirle(string CipsControl, string CipsProperty)
        {
            if (!string.IsNullOrEmpty(CipsControl))
            {
                switch (CipsControl)
                {
                    case "Button": {
                        PropertyBul(CipsProperty,"Button"); break;
                    }
                    case "TextBox": {
                        PropertyBul(CipsProperty, "TextBox"); break;
                    }
                    case "Text": {
                        PropertyBul(CipsProperty, "ContentControl"); break;
                    }
                }
            }
        }

        private void PropertyBul(string CipsProperty,string ControlType) //Type sona taşınacak
        {
            string[] properties = CipsProperty.Split(' ');
            foreach (string property in properties)
            {
                int i = property.IndexOf(':');
                if (i > 0)
                {
                    string SelectedProperty = property.Substring(0, i); // Button=name:"kelle" Text:"boya" [(gerikalan)]
                    string Controlname = SelectedProperty;
                    string Setting = property.Substring(i + 1); //:(burası)
                    OlayBul(Controlname, Setting, ControlType, CipsProperty, SelectedProperty);
                }
            }
        }

        private void OlayBul(string Controlname, string Setting, string ControlType, string property,string SelectedProperty)
        {
            int sira = 0;
            string olaykumesi = "";
            string[] olaycemberi = property.Split('[',']');
            foreach (string cember in olaycemberi)
            {
                if (sira==1)
                olaykumesi = cember;
                sira++;
            }

            try
            {
                string[] olaylar = olaykumesi.Split(',');
                foreach (string olay in olaylar)
                {
                    int i = olay.IndexOf('=');
                    if (i > 0)
                    {
                        string olayAdi = olay.Substring(0, i);
                        string Olay = olay.Substring(i + 1);
                        olayimiz = Olay;
                        YapAtrik(Controlname, Setting, ControlType, olayAdi, SelectedProperty);
                    }
                }
            }
            catch { }
        }

        private void YapAtrik(string ControlName, string Setting, string ControlType, string OlayAdi, string SelectedProperty)
        {
            switch (ControlType)
            {
                case "Button":
                    {
                        Button b = new Button(); ALLGrid.Children.Add(b); b.Content = "Button"; b.Width = 120; b.Height = 50;
                        switch (SelectedProperty) //ayar tipi
                        {
                            case "Name": b.Name = Setting; break;
                            case "Text": b.Content = Setting; break;
                        }

                        switch (OlayAdi)
                        { 
                            case "Click": b.Click+=new RoutedEventHandler(b_Click); break;
                        }
                        break;
                    }
            }
        }

        void b_Click(object sender,EventArgs e)
        {
            //cips dosyasını bulalım
            int index = tb1.Text.LastIndexOf('\\');
            string cipsYolu= tb1.Text.Substring(0,index);
            OlayCipsi(cipsYolu);
        }

        void OlayCipsi(string cipsYolu)
        {
            string metod = "";
            string eventim = "";

            //ilk önce okuyor ve ayıklıyoruz
            try
            {
                int i = 0;
                foreach (string line in File.ReadAllLines(cipsYolu + "\\" + olayimiz))
                {
                    line.Trim();
                    if (OlaySonu(line) == false)
                    {
                        metod = line;
                    }
                    else if(OlaySonu(line) == true)
                    {
                        eventim = line.Substring(0,line.Length-1) ;
                    }
                    i++;
                }
                if (i%2==0)
                OlayıGerceklestir(metod, eventim);
            }
            catch { }
        }

        bool OlaySonu(string ek)
        {
            if (ek.IndexOf(';') != -1)
            {
                return true;
            }
            else
                return false;
        }

        private void OlayıGerceklestir(string metod, string eventim)
        {
            switch (metod)
            {
                case "ShowMessage": 
                    {
                        MessageBox.Show(eventim); break;
                    }
            }
        }

    }
}
